Grafana v10.4 の Amazon Managed Grafana ワークスペースを AWS CDK で構築してみた

Grafana v10.4 の Amazon Managed Grafana ワークスペースを AWS CDK で構築してみた

Clock Icon2024.10.01

こんにちは、製造ビジネステクノロジー部の若槻です。

少し前のアップデートですが、2024/5/15 のアナウンスで Amazon Managed Grafana で Grafana バージョン 10.4 がサポートが開始されました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/05/amazon-managed-grafana-supports-version-10-4/

https://aws.amazon.com/about-aws/whats-new/2024/05/amazon-managed-grafana-supports-version-10-4/

Grafana v10.4 自体は同年 3 月に Grafana Labs で v10 の最終マイナーバージョンとしてリリースされていたものとなります。

https://grafana.com/blog/2024/03/06/grafana-10.4-release-all-the-latest-features/

ちなみに Amazon Managed Grafana で新バージョンがサポートされるタイミングは、今までのバージョン履歴を見る限り Grafana Labs で最後のマイナーバージョンがリリースされたタイミング後となるようです。

https://grafana.com/docs/grafana/latest/whatsnew/

Amazon Managed Grafana の v10.4 で追加された機能は以下で確認可能です。

https://docs.aws.amazon.com/grafana/latest/userguide/version-differences.html

今回は、この Grafana v10.4 の Amazon Managed Grafana ワークスペースを AWS CDK で構築してみました。

試してみた

ワークスペースを作成する(Grafana バージョン未指定の場合)

Amazon Managed Grafana のワークスペースを作成するには、aws-grafana.CfnWorkspace Construct を使用します。Cfn とある通り現在適用されているのは L1 Construct のみです。

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_grafana-readme.html

Grafana Workspace の CloudFormation ドキュメントを参照すると、GrafanaVersion というプロパティがありますが、これはオプションであり、また既定値は無いようです。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-grafanaversion

そこでまずは Grafana バージョンを指定せずにワークスペースを作成してみます。下記がその CDK コードです。

lib/cdk-sample-stack.ts
import * as grafana from 'aws-cdk-lib/aws-grafana';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class CdkSampleStack extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    // ワークスペースによる AWS リソースへのアクセス許可を付与する IAM Role を作成
    const principal = new iam.ServicePrincipal(
      'grafana.amazonaws.com'
    ).withConditions({
      StringLike: {
        'aws:SourceArn': `arn:aws:grafana:${this.region}:${this.account}:/workspaces/*`,
      },
    });
    const grafanaRole = new iam.Role(this, 'GrafanaWorkspaceRole', {
      assumedBy: principal,
    });

    // Grafana ワークスペースの作成
    new grafana.CfnWorkspace(this, 'GrafanaWorkspace', {
      accountAccessType: 'CURRENT_ACCOUNT',
      authenticationProviders: ['SAML'],
      permissionType: 'SERVICE_MANAGED',
      roleArn: grafanaRole.roleArn,
      pluginAdminEnabled: true,
      // Grafana バージョンは指定しない
    });
  }
}

デプロイを実行すると、CloudFormation スタックでワークスペースが作成されました。

Amazon Managed Grafana のダッシュボードから作成されたワークスペースを確認すると、バージョン 10.4 で作成されていました。

AWS CDK で構築して Amazon Managed Grafana ワークスペースのバージョンは、既定で v10.4 が適用されるようです。

ワークスペースを作成する(Grafana バージョンを明示的に指定する場合)

CfnWorkspace の grafanaVersion で v10.4 を明示的にした場合はどうなるでしょうか。

以下のように CDK コードを修正します。

$ git diff
diff --git a/lib/cdk-sample-stack.ts b/lib/cdk-sample-stack.ts
index fe79c20..b90306d 100644
--- a/lib/cdk-sample-stack.ts
+++ b/lib/cdk-sample-stack.ts
@@ -26,6 +26,7 @@ export class CdkSampleStack extends cdk.Stack {
       permissionType: 'SERVICE_MANAGED',
       roleArn: grafanaRole.roleArn,
       pluginAdminEnabled: true,
+      grafanaVersion: '10.4',
     });
   }
 }

CDK Diff を確認すると、CloudFormation 上では GrafanaVersion プロパティが追加されるという差分が出ました。Grafana バージョンが既定で最新バージョンになるのは Amazon Managed Grafana 側の仕様のようです。

$ npx cdk diff
Stack CdkSampleStack
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
Resources
[~] AWS::Grafana::Workspace GrafanaWorkspace GrafanaWorkspace
 └─ [+] GrafanaVersion
     └─ 10.4

✨  Number of stacks with differences: 1

デプロイをするとワークスペースの更新が走りますが、更新完了後の Grafana バージョンはもちろん 10.4 のままです。

使いたいバージョンが最新でなくなった場合でも、このように明示的にバージョンを指定することにより利用が可能となります。

ダッシュボードにログインする

下記を参考にしてワークスペースの SAML を設定し、ダッシュボードにログインしてみます。
https://dev.classmethod.jp/articles/creating-amazon-managed-grafana-workspace-and-configuring-saml-with-aws-cdk/

参考までに、SAML を構成したワークスペースの CDK コードは以下のようになります。

lib/cdk-sample-stack.ts
import * as grafana from 'aws-cdk-lib/aws-grafana';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';

const GRAFANA_WORKSPACE_SAML_ADMIN_ROLE =
  process.env.GRAFANA_WORKSPACE_SAML_ADMIN_ROLE || '';
const GRAFANA_WORKSPACE_SAML_EDITOR_ROLE =
  process.env.GRAFANA_WORKSPACE_SAML_EDITOR_ROLE || '';
const GRAFANA_WORKSPACE_SAML_IDP_METADATA_URL =
  process.env.GRAFANA_WORKSPACE_SAML_IDP_METADATA_URL || '';

export class CdkSampleStack extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    // ワークスペースによる AWS リソースへのアクセス許可を付与する IAM Role を作成
    const principal = new iam.ServicePrincipal(
      'grafana.amazonaws.com'
    ).withConditions({
      StringLike: {
        'aws:SourceArn': `arn:aws:grafana:${this.region}:${this.account}:/workspaces/*`,
      },
    });
    const grafanaRole = new iam.Role(this, 'GrafanaWorkspaceRole', {
      assumedBy: principal,
    });

    // Grafana ワークスペースの作成
    new grafana.CfnWorkspace(this, 'GrafanaWorkspace', {
      accountAccessType: 'CURRENT_ACCOUNT',
      authenticationProviders: ['SAML'],
      permissionType: 'SERVICE_MANAGED',
      roleArn: grafanaRole.roleArn,
      pluginAdminEnabled: true,
      grafanaVersion: '10.4',
      samlConfiguration: {
        assertionAttributes: {
          name: 'nickname',
          login: 'email',
          email: 'email',
          role: 'email',
        },
        loginValidityDuration: 1440,
        roleValues: {
          admin: [GRAFANA_WORKSPACE_SAML_ADMIN_ROLE],
          editor: [GRAFANA_WORKSPACE_SAML_EDITOR_ROLE],
        },
        idpMetadata: {
          url: GRAFANA_WORKSPACE_SAML_IDP_METADATA_URL,
        },
      },
    });
  }
}

ダッシュボードにログインすると、Grafana バージョンが 10.4.1 であることが確認できました。

おわりに

Grafana v10.4 の Amazon Managed Grafana ワークスペースを AWS CDK で構築してみました。

新バージョンのサポートは嬉しいですが、最も心待ちにしているのはやはり Cognito User Pool によるユーザー認証のサポートです。引き続きアップデートをウォッチしていきたいと思います。

https://github.com/aws/amazon-managed-grafana-roadmap/issues/24

参考

https://dev.classmethod.jp/articles/amazon-managed-grafana-update-version/

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.